fundamentals of logic in discrete mathematics